/* 用户数据仓库  选项式*/
import { defineStore } from 'pinia'
/* 饿了么组件 */
import 'element-plus/theme-chalk/el-message.css'
import { ElMessage } from 'element-plus'
/* 用户相关API */
import { loginAPI, getUserInfoAPI } from '@/apis/user'
/* 引入token存储 */
import { SET_TOKEN } from '@/utils/token'
/* 引入数据类型 */
import type {
  loginTypes,
  loginRespondReturn,
  userInfoRespondData,
} from '@/apis/user/userType'
import type { userState } from '../types/userState'
export const userInfoStore = defineStore('userInfo', {
  /* state存储数据的仓库 */
  state: (): userState => {
    return {
      token: localStorage.getItem('token'),
      username: '',
      avatar: '',
    }
  },
  /* 异步任务 || 同步任务 */
  actions: {
    /* 用户登录的方法 */
    async userLogin(val: loginTypes) {
      const { data }: loginRespondReturn = await loginAPI(val)
      /* 对相应回来的数据进行校验 */
      if (data.code == 200) {
        /* 此时登陆成功 */
        /* 将token存储到 localStorage 实现持久化*/
        this.token = data.data
        SET_TOKEN(data.data)
        return 'ok'
      } else {
        ElMessage.error('登陆失败')
        return Promise.reject(new Error(data.message))
      }
    },
    /* 获取用户信息 */
    async getUser() {
      const { data: res }: userInfoRespondData = await getUserInfoAPI()
      /* 对响应回来的数据进行判断 */
      if (res.code != 200) ElMessage.error(res.data.message)
      this.avatar = res.data.avatar
      this.username = res.data.name
    },
  },
})
